#pragma once

#include<iostream>
#include<string>
#include<jsoncpp/json/json.h>

using namespace std;

//定制协议的过程，目的就是定制结构化数据的过程
//请求格式

typedef struct request
{
    int x;
    int y;
    char op;
}request_t;

//响应格式
typedef struct response
{
    int code;//server运算玩的计算状态：0（success）,-1(div 0)...
    int result;//计算结果。
}response_t;

string SerializeRequst(const request_t& req)
{
    Json::Value root;//可以承装任何对象，json是一种kv式的序列化方案
    root["datax"] = req.x;
    root["datay"] = req.y;
    root["operator"] = req.op;

    Json::FastWriter writer;
    string str = writer.write(root);
    return str;
}

void DeserializeRquest(const string& json_string, request_t& req)
{
    Json::Reader reader;
    Json::Value root;

    reader.parse(json_string, root);

    req.x = root["datax"].asInt();
    req.y = root["datay"].asInt();
    req.op = (char)root["operator"].asInt();
}

string SerializeResponse(const response_t& res)
{
    Json::Value root;//可以承装任何对象，json是一种kv式的序列化方案
    root["code"] = res.code;
    root["result"] = res.result;

    Json::FastWriter writer;
    string str = writer.write(root);
    return str;
}

void DeserializeResponse(const string& json_string, response_t& res)
{
    Json::Reader reader;
    Json::Value root;

    reader.parse(json_string, root);

    res.code = root["code"].asInt();
    res.result = root["result"].asInt();
}